package com.rtf.framework.common.util;

import com.rtf.framework.common.exception.AppException;
import org.apache.commons.io.FilenameUtils;
import org.apache.commons.lang3.StringUtils;

/**
 * 文件名操作类
 * @Author : liupeng
 * @Date : 2018/7/27 14:36
 * @Modified By
 */
public class UtilFileName extends FilenameUtils {

    /**
     * 特殊字符
     */
    public static final String SPECIAL_CHARS  = "[`~!@#$^&*=|{}':;',\\\\[\\\\]<>?~！@#￥……&*（）——|{}【】‘；：”“'。，、？] " ;

    /**
     * 获取文件扩展名，支持网络url参数的方式
     * @param filename
     * @return
     */
    public static String getExtension(final String filename) {
        String extension = FilenameUtils.getExtension( filename ) ;
        if(StringUtils.indexOf(extension , "?")!=-1){
            extension = extension.substring( 0 , extension.indexOf("?")) ;
        }

        return StringUtils.isBlank(extension) ? "" : extension.trim().toLowerCase() ;
    }

    /**
     * 格式化文件名称
     * @param filename
     * @return
     */
    public static String formatName(String filename){
        String extension = getExtension( filename ) ;
        if( UtilString.isBlank( extension ) ){
            throw new AppException("获取文件扩展名失败") ;
        }

        String fullPath = UtilFileName.getFullPath( filename ) ;

        String baseName = removeSpecialChar( UtilFileName.getBaseName( filename ) ) ;

        filename = fullPath + baseName + "." + getExtension( filename ) ;

        filename = filename.replaceAll( " " , "" ) ;

        return filename ;
    }

    /**
     * 移除特殊字符
     * @param value
     * @return
     */
    public static String removeSpecialChar(String value){
        // 替换特殊字符
        for (char item : SPECIAL_CHARS.toCharArray()) {
            value = UtilString.remove( value , item ) ;
        }
        return value ;
    }

//    public static void main(String[] args) {
//        String filename = "uploads/zshgd/2020-03-23/1584967240670/Selenium WebDriver阶段八 - (分布并行测试Grid，json实施node节点).Pdf" ;
//
////        filename = "1585{826658(1)" ;
//
//        System.out.println( formatName( filename ) );
//        filename = "Selenium WebDriver阶段八 - (分布并行测试Grid，json实施node节点).Pdf" ;
//
//        System.out.println( formatName( filename ) );
//        filename = "elenium WebDriver阶段八 - (分布并行测试Grid，json实施node节点).Pdf" ;
//
//        String fullPath = UtilFileName.getFullPath( filename ) ;
//
//        System.out.println( fullPath );
//
//        String fileName = UtilFileName.getBaseName( filename ) ;
//
//        System.out.println( fileName );
//
//        System.out.println( getExtension( filename ) );
//
//        System.out.println( fullPath + fileName + "." + getExtension( filename ) );
//
//        System.out.println( ( System.currentTimeMillis() +"").length() );
//    }

}
